import os
import shutil

'''运行环境3.11.4'''

class rennames:
    def __init__(self,path):
        '''初始化函数'''
        self.path = path
        self.File_handling()                                                    #执行文件预处理函数

    def File_handling(self):
        '''文件预处理'''
        parent_dir = os.path.dirname(self.path)                                 #获取文件夹的上层路径
        end_mikdir = os.path.dirname(parent_dir)                                #获取parent_dir的路径
        self.end_path = os.path.join(end_mikdir,"转换后\\")                      #在需要转换的文件夹基础上创建转换后文件夹
        if not os.path.exists(self.end_path):                                   #如果文件夹不存在
            os.makedirs(self.end_path)                                          #使用os.makedirs()函数创建文件夹
        else:
            self.ss = os.listdir(self.end_path)                                 #如果文件夹存在,将文件夹里面的内容传递下去

    def former(self):
        '''把文件夹的.mkv内容复制到新文件夹夹'''
        path = self.path                                                        #选定转换内容文件夹路径
        former_file = os.listdir(path)                                          #获取文件名称（名称和格式）
        for i in former_file:                                                   #遍历文件夹
            find_mkv = os.path.splitext(i)                                      #将名称与文件类型分开
            if find_mkv[1] == '.mkv':                                           #如果格式为.mkv
                com_path = os.path.join(path,i)                                 #获取到文件的完整路径
                #print(i+"这里")
                try:                                            
                    self.ss.index(find_mkv[0]+".mp4")                           #查表操作,避免重复的复制文件
                    #print('重复')
                except:
                    shutil.copy2(com_path,self.end_path)                        #只复制后缀为.mkv的文件
        

    def end(self):
        '''转换函数'''       
        end_path = self.end_path                                                #选定转换后内容的文件夹       
        end_file = os.listdir(end_path)                                         #获取文件名称（名称和格式）          
        c = 0                                                                   #创建一个计数器
        for x in end_file:                                                      #遍历转换后的文件
            find_mkv = os.path.splitext(x)
            if not find_mkv[1] == '.mp4':
                s2 = os.path.join(end_path,x)                                   #路径拼接s2是end_path文件夹下的文件绝对路径
                find_mkv = os.path.splitext(x)                                  #转换后的路径与名称
                new_name = os.path.join(end_path, str(find_mkv[0]) + '.mp4')
                s1 = os.rename(s2,new_name)                                     #重命名,参数1需要重命名的完整路径,参数2重命名后的完整路径
                c+=1                                                            #计数器加1
                print(f'{c}  {new_name}已完成')                                  #打印一下转换的进度
  
    def run(self):
        '''运行函数'''
        self.former()
        self.end()
        print('运行结束')

if __name__ == '__main__':
    res = rennames("转换前\\")                                                  #将路径传入进去
    res.run()                                      





